#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void shuku(char a[][1000], int n, int l, char *ma);
void paixu(char a[][1000], int n);
int main(int argc, char *argv[])
{
	int n, i, q, t;
	scanf("%d %d", &n, &q); // n：长度，q：查询次数
	getchar();				
	char shu[1000][1000], ma[1000];
	for (i = 0; i < n; i++)
	{
		scanf("%s", shu[i]);
	}
	paixu(shu, n);			// 对shu进行排序
	for (i = 0; i < q; i++) // 读取q次查询
	{
		scanf("%d %s", &t, ma); // 每次查询包括整数t和字符串ma
		shuku(shu, n, t, ma);	// 对shu进行查询
	}

	return 0;
}
void shuku(char a[][1000], int n, int l, char *ma)
{
	int i, t = 1, j, k;
	for (i = 0; i < n; i++)
	{
		t = 1;
		// 对于每个字符串，首先判断其长度是否小于要匹配的字符串的长度l，如果是，则将t置为0，表示不满足条件。
		if (strlen(a[i]) < l)
			t = 0;
		else
		{
			// 从字符串的末尾开始，与要匹配的字符串的末尾进行逐个字符比较，如果有不相等的字符，则将t置为0，并跳出循环。
			for (j = strlen(a[i]) - 1, k = l - 1; k >= 0; k--, j--)
			{
				if (ma[k] != a[i][j])
				{
					t = 0;
					break;
				}
			}
		}
		// 如果所有字符都匹配成功，则将t保持为1，表示找到了匹配的字符串。
		if (t == 1)
		{
			printf("%s\n", a[i]);
			break;
		}
	}
	if (t == 0)
		printf("-1\n");
}
void paixu(char a[][1000], int n)
{
	int i, j;
	char t[1000];
	for (i = 0; i < n; i++)
	{
		for (j = 0; j < n - 1; j++)
		{
			// 如果前一个字符串的长度大于后一个字符串的长度，则交换两个字符串的位置。
			if (strlen(a[j]) > strlen(a[j + 1]))
			{
				strcpy(t, a[j]);
				strcpy(a[j], a[j + 1]);
				strcpy(a[j + 1], t);
			}
			// 如果前一个字符串的长度等于后一个字符串的长度，则比较两个字符串的字典序，如果前一个字符串大于后一个字符串，则交换两个字符串的位置。
			if (strlen(a[j]) == strlen(a[j + 1]))
			{
				if (strcmp(a[j], a[j + 1]) > 0)
				{
					strcpy(t, a[j]);
					strcpy(a[j], a[j + 1]);
					strcpy(a[j + 1], t);
				}
			}
		}
	}
}